package com.ym.core.rabbit;

import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;

/**
 * 延时队列Task
 *
 * @author 李涛
 * @version 创建时间：2018年6月16日 下午3:34:43
 */
@Data
public abstract class AbstractDelayedTask implements Serializable {

	protected static final Logger LOG = LoggerFactory.getLogger(AbstractDelayedTask.class);

	/**
	 * 任务唯一性标志
	 */
	private String uuid = IdUtil.fastSimpleUUID();

	/**
	 * 任务描述
	 */
	private String describe;

	/**
	 * 多久后执行，单位毫秒
	 */
	private Long delay;

	/**
	 * 方法需要执行的参数
	 */
	private JSONObject params;

	public AbstractDelayedTask(String describe, long delay, JSONObject params) {
		this.describe = describe;
		this.delay = delay;
		this.params = params;
	}

	/**
	 * 执行任务
	 */
	public void excute() throws Exception {
		LOG.info("执行延时任务开始===========》{}", describe);
		this.run();
		LOG.info("执行延时任务结束===========》{}", describe);
	}

	public abstract void run() throws Exception;

}
